00001
00002
00003
00004
00006 #ifndef METUTILITIES_MET_METMAKER_H
00007 #define METUTILITIES_MET_METMAKER_H 1
00008
00009
00010 #include <string>
00011
00012
00013 #include "AsgTools/ToolHandle.h"
00014 #include "AsgTools/AsgTool.h"
00015
00016
00017 #include "METInterface/IMETMaker.h"
00018
00019
00020 #include "xAODJet/JetContainer.h"
00021
00022
00023 #include "InDetTrackSelectionTool/IInDetTrackSelectionTool.h"
00024
00025
00026
00027 namespace met {
00028
00029
00030 typedef ElementLink<xAOD::IParticleContainer> obj_link_t;
00031
00032 class METMaker
00033 : public asg::AsgTool,
00034 virtual public IMETMaker
00035
00036 {
00037
00038 ASG_TOOL_CLASS(METMaker, IMETMaker)
00039
00040
00041
00043 public:
00044
00045
00046
00048 METMaker(const std::string& name);
00049
00051 virtual ~METMaker();
00052
00053
00054 StatusCode initialize();
00055 StatusCode finalize();
00056
00057 StatusCode rebuildMET(const std::string& metKey,
00058 xAOD::Type::ObjectType metType,
00059 xAOD::MissingETContainer* metCont,
00060 const xAOD::IParticleContainer* collection,
00061 const xAOD::MissingETAssociationMap* map,
00062 MissingETBase::UsageHandler::Policy objScale);
00063
00064 StatusCode rebuildMET(xAOD::MissingET* met,
00065 const xAOD::IParticleContainer* collection,
00066 const xAOD::MissingETAssociationMap* map,
00067 MissingETBase::UsageHandler::Policy objScale);
00068
00069 StatusCode rebuildMET(xAOD::MissingET* met,
00070 const xAOD::IParticleContainer* collection,
00071 const xAOD::MissingETAssociationMap* map,
00072 MissingETBase::UsageHandler::Policy p,
00073 bool removeOverlap,
00074 MissingETBase::UsageHandler::Policy objScale);
00075
00076 StatusCode rebuildJetMET(const std::string& metJetKey,
00077 const std::string& softClusKey,
00078 const std::string& softTrkKey,
00079 xAOD::MissingETContainer* metCont,
00080 const xAOD::JetContainer* jets,
00081 const xAOD::MissingETContainer* metCoreCont,
00082 const xAOD::MissingETAssociationMap* map,
00083 bool doJetJVT);
00084 StatusCode rebuildJetMET(const std::string& metJetKey,
00085 const std::string& metSoftKey,
00086 xAOD::MissingETContainer* metCont,
00087 const xAOD::JetContainer* jets,
00088 const xAOD::MissingETContainer* metCoreCont,
00089 const xAOD::MissingETAssociationMap* map,
00090 bool doJetJVT);
00091 StatusCode rebuildJetMET(xAOD::MissingET* metJet,
00092 const xAOD::JetContainer* jets,
00093 const xAOD::MissingETAssociationMap* map,
00094 xAOD::MissingET* metSoftClus,
00095 const xAOD::MissingET* coreSoftClus,
00096 xAOD::MissingET* metSoftTrk,
00097 const xAOD::MissingET* coreSoftTrk,
00098 bool doJetJVT,
00099 bool tracksForHardJets = false,
00100 std::vector<const xAOD::IParticle*>* softConst=0);
00101
00102 StatusCode rebuildTrackMET(const std::string& metJetKey,
00103 const std::string& softTrkKey,
00104 xAOD::MissingETContainer* metCont,
00105 const xAOD::JetContainer* jets,
00106 const xAOD::MissingETContainer* metCoreCont,
00107 const xAOD::MissingETAssociationMap* map,
00108 bool doJetJVT);
00109 StatusCode rebuildTrackMET(xAOD::MissingET* metJet,
00110 const xAOD::JetContainer* jets,
00111 const xAOD::MissingETAssociationMap* map,
00112 xAOD::MissingET* metSoftTrk,
00113 const xAOD::MissingET* coreSoftTrk,
00114 bool doJetJVT);
00115
00116 StatusCode markInvisible(const xAOD::IParticleContainer* collection,
00117 const xAOD::MissingETAssociationMap* map,
00118 xAOD::MissingETContainer* metCont);
00119
00120 StatusCode buildMETSum(const std::string& totalName,
00121 xAOD::MissingETContainer* metCont,
00122 MissingETBase::Types::bitmask_t softTermsSource);
00123
00125
00127
00129
00131
00133
00135 private:
00136
00137 StatusCode fillMET(xAOD::MissingET *& met,
00138 xAOD::MissingETContainer * metCont,
00139 const std::string& metKey,
00140 const MissingETBase::Types::bitmask_t metSource);
00141 bool acceptTrack(const xAOD::TrackParticle* trk, const xAOD::Vertex* vx) const;
00142 const xAOD::Vertex* getPV() const;
00143
00144
00145
00146 bool m_jetCorrectPhi;
00147 double m_jetMinEfrac;
00148 double m_jetMinWeightedPt;
00149 std::string m_jetConstitScaleMom;
00150 std::string m_jetJvtMomentName;
00151 std::string m_jetRejectionDec;
00152
00153 double m_CenJetPtCut, m_FwdJetPtCut ;
00154 double m_JvtCut, m_JvtPtMax;
00155 std::string m_jetSelection;
00156
00157 double m_customCenJetPtCut,m_customFwdJetPtCut;
00158 double m_customJvtCut,m_customJvtPtMax;
00159
00160 bool m_extraJetRejection;
00161 bool m_doPFlow;
00162 bool m_doSoftTruth;
00163 bool m_doConstJet;
00164
00165 bool m_doRemoveMuonJets;
00166 bool m_doRemoveElecTrks;
00167 bool m_doRemoveElecTrksEM;
00168 bool m_doSetMuonJetEMScale;
00169
00170 bool m_doExtraCleaning;
00171 double m_minimumImbalance;
00172
00173 bool m_muEloss;
00174 bool m_muIsolEloss;
00175 bool m_orCaloTaggedMuon;
00176 bool m_greedyPhotons;
00177 bool m_pfInsurance;
00178
00179 ToolHandle<InDet::IInDetTrackSelectionTool> m_trkseltool;
00181 METMaker();
00182
00183 };
00184
00185 }
00186 #endif //> !METUTILITIES_MET_METMAKER_H