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