00001
00002
00003
00004
00006 #ifndef METUTILITIES_MET_METREBUILDER_H
00007 #define METUTILITIES_MET_METREBUILDER_H 1
00008
00009
00010 #include <string>
00011
00012
00013 #include "AsgTools/AsgTool.h"
00014 #include "AsgTools/ToolHandle.h"
00015
00016
00017 #include "METInterface/IMETRebuilder.h"
00018
00019
00020 #include "InDetTrackSelectionTool/IInDetTrackSelectionTool.h"
00021
00022
00023 #include "xAODJet/JetContainer.h"
00024 #include "xAODTracking/VertexFwd.h"
00025 #include "xAODTracking/TrackParticleFwd.h"
00026
00027
00028
00029 namespace met {
00030
00031
00032 typedef ElementLink<xAOD::IParticleContainer> obj_link_t;
00033
00034 class METRebuilder
00035 : public asg::AsgTool,
00036 virtual public IMETRebuilder
00037
00038 {
00039
00040 ASG_TOOL_CLASS(METRebuilder, IMETRebuilder)
00041
00042
00043
00045 public:
00046
00047
00048
00050 METRebuilder(const std::string& name);
00051
00053 virtual ~METRebuilder();
00054
00055
00056 StatusCode initialize();
00057 StatusCode finalize();
00058 StatusCode execute();
00059
00060 StatusCode copyMET(const std::string& metKey,
00061 xAOD::MissingETContainer* metCont,
00062 const xAOD::MissingETComponentMap* metMap);
00063
00064 StatusCode rebuildMET(const std::string& metKey,
00065 xAOD::MissingETContainer* metCont,
00066 const xAOD::IParticleContainer* collection,
00067 const xAOD::MissingETComponentMap* metMap,
00068 bool doTracks=true);
00069
00070 StatusCode rebuildMET(xAOD::MissingET* met,
00071 const xAOD::IParticleContainer* collection,
00072 const xAOD::MissingETComponent* component,
00073 bool doTracks=true);
00074
00075 StatusCode rebuildJetMET(const std::string& jetKey,
00076 const std::string& softKey,
00077 xAOD::MissingETContainer* metCont,
00078 const xAOD::JetContainer* jets,
00079 const xAOD::MissingETComponentMap* metMap,
00080 bool doTracks=true) {
00081 return rebuildJetMET(jetKey,softKey,metCont,jets,metMap,doTracks,
00082 m_jetDoJvf,m_pureTrkSoft,m_softJetScale);
00083 }
00084
00085 StatusCode rebuildJetMET(const std::string& jetKey,
00086 const std::string& softKey,
00087 xAOD::MissingETContainer* metCont,
00088 const xAOD::JetContainer* jets,
00089 const xAOD::MissingETComponentMap* metMap,
00090 bool doTracks,
00091 bool doJvfCut,
00092 bool pureTrkSoft,
00093 const std::string& softJetScale);
00094
00095 StatusCode rebuildJetMET(const std::string& jetKey,
00096 const std::string& softKey,
00097 xAOD::MissingETContainer* metCont,
00098 const xAOD::JetContainer* jets,
00099 const xAOD::MissingETComponentMap* metMap,
00100 bool doTracks,
00101 bool doJvfCut,
00102 bool pureTrkSoft,
00103 const std::string& softJetScale,
00104 float& stvf);
00105
00106 StatusCode rebuildJetMET(xAOD::MissingET* metJet,
00107 xAOD::MissingET* metSoft,
00108 const xAOD::JetContainer* jets,
00109 const xAOD::MissingETComponent* component,
00110 bool doTracks,
00111 bool doJvfCut,
00112 bool pureTrkSoft,
00113 const std::string& softJetScale,
00114 float& stvf,
00115 const xAOD::MissingETComponent* comp_softtrk=0);
00116
00117 StatusCode buildMETSum(const std::string& totalName,
00118 xAOD::MissingETContainer* metCont);
00119
00121
00123
00125
00127
00129
00131 private:
00132 bool acceptTrack(const xAOD::TrackParticle* trk,
00133 const xAOD::Vertex* pv) const;
00134 void associateTracks(const xAOD::IParticle* obj);
00135 StatusCode fillMET(xAOD::MissingET *& met,
00136 xAOD::MissingETContainer * metCont,
00137 const std::string& metKey,
00138 const MissingETBase::Types::bitmask_t metSource);
00139
00140
00141
00143 METRebuilder();
00144
00145 std::string m_eleColl;
00146 std::string m_gammaColl;
00147 std::string m_tauColl;
00148 std::string m_jetColl;
00149 std::string m_muonColl;
00150
00151 std::string m_eleTerm;
00152 std::string m_gammaTerm;
00153 std::string m_tauTerm;
00154 std::string m_jetTerm;
00155 std::string m_muonTerm;
00156 std::string m_softTerm;
00157 std::string m_softTermType;
00158
00159 std::string m_inputMap;
00160 std::string m_outMETCont;
00161 std::string m_outMETTerm;
00162 bool m_warnOfDupes;
00163
00164 bool m_doEle;
00165 bool m_doGamma;
00166 bool m_doTau;
00167 bool m_doMuon;
00168
00169 bool m_rebuildEle;
00170 bool m_rebuildGamma;
00171 bool m_rebuildTau;
00172 bool m_rebuildMuon;
00173
00174
00175 double m_jetPtCut;
00176 bool m_jetDoJvf;
00177 double m_jetJvfCut;
00178 std::string m_softJetScale;
00179 bool m_doTracks;
00180 bool m_pureTrkSoft;
00181 bool m_doSTVF;
00182
00183
00184 SG::AuxElement::Decorator<char> m_trkUsedDec;
00185
00186 bool m_trk_doPVsel;
00187 ToolHandle<InDet::IInDetTrackSelectionTool> m_trkseltool;
00188 std::string m_vtxColl;
00189 std::string m_clusColl;
00190 };
00191
00192 }
00193 #endif //> !METUTILITIES_MET_METREBUILDER_H